2.1.2 JS抽象语法树
由 JS 解析器把代码转化成 AST
编译器 和 解释器
能够将代码转化成AST的工具叫做“编译器”,
而把能够将AST翻译成目标语言并运行的工具叫做“解释器”。
编译器
词法分析:一个一个字母分析
- 1.分析形参
- 2.分析变量声明
- 3.分析函数声明
语法分析: 把词法分析数组转化成抽象语法树(AST),验证语法
字节码生成器 字节码生成器的作用,是将抽象语法树转为JavaScript引擎可以执行的二进制代码
字节码解释器 字节码解释器的作用是读取并执行字节码。
参考:
什么是抽象语法树
众多的引擎
通过什么工具或库来实现源码转化为抽象语法树?
那就是javascript Parser 解析器,他会把js源码转化为抽象的语法树。
浏览器会把js源码通过解析器转化为抽象语法树,再进一步转化为字节码或直接生成机器码
一般来说每一个js引擎都会有自己的抽象语法树格式,chrome的v8引擎,firefox的SpiderMonkey 引擎等等,
MDN提供了详细SpiderMonkey AST format的详细说明,算是业界的标准。
(SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎,
为了在SpiderMonkey中运行JavaScript代码,应用程序必须有三个要素:JSRuntime,JSContext和全局对象。)
chrome有v8,firefix有spidermonkey.还有一些常用的引擎有:
esprima
acron
Traceur
UglifyJS2
shift
1
2
3
4
5
2
3
4
5
AST的三板斧
通过esprima生成AST
通过estraverse遍历和更新AST
通过escodegen将AST重新生成源码
1
2
3
2
3